class Solution {
        public int myAtoi(String s) {
        int len = s.length(), i = 0;
        while (i < len && s.charAt(i) == ' ') i++; // 读取到第一个非空格字符
        boolean isFu = false;
        // 判断数字，判断是否合法
        if( i>=len )
            return 0;
        if (s.charAt(i) == '+' || s.charAt(i) == '-') { // 判断正负
            isFu = (s.charAt(i) == '-');
            i++;
        } else if (s.charAt(i) < '0' || s.charAt(i) > '9') { // “ work”这种情况
            return 0;
        }
        // 读入前导0
        while (i < len && s.charAt(i)=='0') i++;
        // 读取数字
        StringBuilder num = new StringBuilder();
        while (i < len && (s.charAt(i) >= '0' && s.charAt(i) <= '9')) {
            num.append(s.charAt(i));
            i ++;
        }
        if( num.length()==0 ){  // " 000"这种情况
            return 0;
        }
        boolean res;
        // 判断范围
        if( isFu ){  // 负数
            res = compare(num.toString().toCharArray(),"2147483648".toCharArray());
        }else{       // 正数
            res = compare(num.toString().toCharArray(),"2147483647".toCharArray());
        }
        if( res && isFu)
            return Integer.MIN_VALUE;
        else if( res && !isFu )
            return Integer.MAX_VALUE;
        String tmp = isFu?"-":"";
        return Integer.parseInt(tmp+num);
    }
    // num1 是否超出num2
    public boolean compare(char[] num1,char[] num2){
        int len1 = num1.length, len2 = num2.length;
        if( len1!=len2 )  // 位数长更大
            return len1 > len2;
        for (int i = 0; i < len1; i++) {
            if( num1[i]!=num2[i] ){
                int n1 = num1[i], n2 = num2[i];
                return n1 > n2;
            }
        }
        return false;  // 值相等，没有超过
    }
}